home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 1 (Walnut Creek)
/
Aminet - June 1993 [Walnut Creek].iso
/
usenet
/
sources
/
volume2
/
dos
/
qcat.1
next >
Wrap
Text File
|
1988-12-28
|
40KB
|
1,074 lines
Path: xanth!nic.MR.NET!csd4.milw.wisc.edu!mailrus!ulowell!page
From: page@swan.ulowell.edu (Bob Page)
Newsgroups: comp.sources.amiga
Subject: v02i100: qcat - quick disk catalog
Message-ID: <10929@swan.ulowell.edu>
Date: 28 Dec 88 17:18:58 GMT
Organization: University of Lowell, Computer Science Dept.
Lines: 1063
Approved: page@swan.ulowell.edu
Submitted-by: elbaum%REED.BITNET@CUNYVM.CUNY.EDU (Daniel Elbaum)
Posting-number: Volume 2, Issue 100
Archive-name: dos/qcat.1
Qcat prints out the full pathname of each file in a series of disks or
a list of directories. It's small and speedy, just perfect for 90% of
what one wants from a disk catalogger, but with none of the bells and
whistles which, I find, sometimes get in the way.
[uuencoded executable included. ..Bob]
# This is a shell archive.
# Remove everything above and including the cut line.
# Then run the rest of the file through sh.
#----cut here-----cut here-----cut here-----cut here----#
#!/bin/sh
# shar: Shell Archiver
# Run the following text with /bin/sh to create:
# qcat.c
# qcat.doc
# qcat.uu
# This archive created: Wed Dec 28 12:15:22 1988
cat << \SHAR_EOF > qcat.c
/***********************************************************************
11/88
QCAT v0.01 -- List files on disks or in directories
-----------------
Copyright (C) 1988 by Daniel Elbaum
This software is freely redistributable provided that:
the three files which comprise it (qcat, qcat.c, qcat.doc)
remain intact; all copyright notices contained in any of
the aforementioned files remain intact; and no fee beyond
reasonable remuneration for collation and distribution be
charged for use and/or purveyance.
***********************************************************************/
#include <stdio.h>
#include <exec/types.h>
#include <exec/memory.h>
#include <libraries/dos.h>
#include <libraries/dosextens.h>
#include <intuition/intuition.h>
/* Error descriptor codes */
#define E_NOLOCK (-1)
#define E_NOMEM (-2)
#define E_NOEXAM (-3)
#define E_USAGE (-4)
#define E_OUTPUT (-5)
#define E_LIBRARY (-6)
#define E_NONODE (-100)
#define E_NOSTRING (-101)
/* Manifest constants */
#define NAMSIZ (108)
#define MEMFLOOR (64000L) /* least amt of mem to leave */
#define IREV (1)
#define INAM ("intuition.library")
/* Global data, type and function declarations */
typedef struct IntuitionBase* ib_t;
ib_t IntuitionBase=NULL;
void *OpenLibrary();
FILE *ofp;
struct {
char filenam[NAMSIZ*10];
} fs;
struct namlist {
char *nam;
struct namlist *next;
} nlist;
/*
Acts like a state machine, the state of which
is determined by the combination of arguments
supplied. The while loop sets the state, while
the if switches select action taken according
thereto.
*/
main(c, v)
char **v;
{
register active;
register err;
char *cdrive=NULL;
char *onam=NULL;
char bu[NAMSIZ*10];
char *getcd();
char *realnam();
void getrspinit(), freelist();
++v;
while (**v == '-'){
switch(*++*v){
case 'o': /* specify output file */
if (!*++v) {prerr(NULL, E_USAGE); exit(10);}
else {onam=*v; ++v;}
break;
case 'c': /* continuous listing of 1 drive */
if (!*++v) {prerr(NULL, E_USAGE); exit(10);}
else {cdrive=*v; ++v;}
if (!(IntuitionBase=(ib_t)OpenLibrary(INAM, IREV))){
prerr(NULL, E_LIBRARY); exit(10);
}
break;
default:
prerr(NULL, E_USAGE);
exit(10);
}
}
if (onam){
if (!(ofp=fopen(onam, "w"))){
prerr(onam, E_OUTPUT);
exit(10);
}
}
else ofp=stdout;
if (cdrive){
getrspinit();
if (getresponse()!=FALSE){
for (active=1; active; ){
realnam(cdrive, fs.filenam); /* seed pathname */
if (err=getnams(cdrive)) prerr(cdrive, err);
if (getresponse()==FALSE) active=0;
}
}
}
else if (!*v){
getcd(bu);
strcpy(fs.filenam, bu);
if (err=getnams(bu)) prerr(bu, err);
}
else{
for (; *v; ++v){
realnam(*v, fs.filenam); /* seed pathname */
if (err=getnams(*v)) prerr(*v, err);
}
}
prlist(ofp, &nlist);
freelist(&nlist);
if (ofp!=stdout) fclose(ofp);
if (IntuitionBase) CloseLibrary(IntuitionBase);
exit(0);
}
/*
If nam is the name of a file, add its size to the global counter.
If nam is the name of a directory, saunter down a level and
grab info for its files.
Return a coded description of any error which occurs, or zero
if success was the order of the day.
*/
getnams(nam)
char *nam;
{
register struct FileLock *l=NULL;
register struct FileInfoBlock *f=NULL;
register err=0;
struct FileLock *Lock();
void addtonam(), truncnam();
if (!nam) return(E_NOEXAM);
if (!(l=Lock(nam, ACCESS_READ))){
return(E_NOLOCK);
}
if (!(f=(struct FileInfoBlock *)AllocMem((ULONG)sizeof(*f), MEMF_PUBLIC))) {
UnLock(l);
return(E_NOMEM);
}
if (!Examine(l, f)) {
UnLock(l);
FreeMem(f, (ULONG)sizeof(*f));
return(E_NOEXAM);
}
if (f->fib_DirEntryType<0){ /* file */
addnam(nam, &nlist);
}
else {
while (ExNext(l, f)){ /* directory */
addtonam(fs.filenam, f->fib_FileName);
if (err=getnams(fs.filenam)) break;
truncnam(fs.filenam); /* delete filename from path */
}
}
UnLock(l);
FreeMem(f, (ULONG)sizeof(*f));
return(err);
}
/*
Assuming p points to a valid pathname and s to a valid filename,
append the filename to the pathname.
*/
void
addtonam(p, s)
register char *p, *s;
{
register char *op=p;
while (*p)
p++;
if (p!=op){
if (*--p!=':')
*++p='/';
p++;
}
while (*s)
*p++=*s++;
*p='\0';
}
/*
Assuming p points to a valid pathname, clip the filename from it.
*/
void
truncnam(p)
register char *p;
{
register char *pp;
if (!p) return;
for (pp=p; *pp; pp++)
;
while (*pp!='/'&&*pp!=':'&&pp>p)
--pp;
if (*pp==':') ++pp;
*pp='\0';
}
/*
Build a real pathname from the filename,
dirname, or drivename specifiecd in nam
into bu. Return a pointer to bu on success,
or NULL if the chore is beyond doing.
*/
char *
realnam(nam, bu)
char *nam, *bu;
{
register addcol;
register struct FileLock *l=NULL;
struct FileLock *Lock();
if (!nam||!bu) return(NULL);
if (nam[strlen(nam)-1]==':') addcol=1;
else addcol=0;
if (!(l=Lock(nam, ACCESS_READ))){
return(NULL);
}
fullnam(l, bu);
UnLock(l);
return(bu);
}
/*
Put the full name of the current
directory into the supplied buffer
and return a pointer to it.
*/
char *
getcd(bu)
char *bu;
{
struct FileLock *ol;
if (!bu) return(NULL);
fullnam(ol=CurrentDir(0L), bu);
CurrentDir(ol);
return(bu);
}
/*
Put the full pathname of a
locked file in the given buffer
and return a pointer to it.
*/
char *
fullnam(l, bu)
register struct FileLock *l;
char *bu;
{
register len;
struct FileLock *nl, *ParentDir();
char bu2[NAMSIZ];
char ebu[NAMSIZ*10];
if (!l||!bu) return(NULL);
bu2[0]=0;
locknam(l, bu);
while (l=ParentDir(l)){
if (locknam(l, bu2)){
sprintf(ebu, "%s/%s", bu2, bu);
strcpy(bu, ebu);
}
else break;
}
if (bu2[0]) bu[strlen(bu2)]=':';
else {bu[len=strlen(bu)]=':'; bu[len+1]='\0';}
return(bu);
}
/*
Put the name of the file or directory
associated with the given lock into
the given buffer and return a pointer
to it or NULL if it couldn't be done.
*/
char *
locknam(l, bu)
register struct FileLock *l;
char *bu;
{
register struct FileInfoBlock *f=NULL;
if (!l||!bu) return(NULL);
if (!(f=(struct FileInfoBlock *)AllocMem((ULONG)sizeof(*f), MEMF_PUBLIC))) {
return(NULL);
}
if (!Examine(l, f)) {
FreeMem(f, (ULONG)sizeof(*f));
return(NULL);
}
strcpy(bu, f->fib_FileName);
FreeMem(f, (ULONG)sizeof(*f));
return(bu);
}
/*
Add a name to the end of the filename list.
Could be more efficient, but the bottleneck
is disk speed. Return a descriptive error
value on failure.
*/
addnam(s, lp)
char *s;
struct namlist *lp;
{
struct namlist *newnode();
char *strsave();
void freelist(), prlist();
if (!s||!lp) return(-1);
if (amtfree()<MEMFLOOR){ /* dump if mem full */
prlist(ofp, lp);
freelist(lp);
}
while (lp->next)
lp=lp->next;
if (!(lp->next=newnode()))
return(E_NONODE); /* won't happen. Better not. */
if (!(lp->next->nam=strsave(s)))
return(E_NOSTRING);
return(0);
}
/*
Allocate a new node for the filename list.
Return a pointer to it or NULL if there's
not enough memory.
*/
struct namlist *
newnode()
{
register struct namlist *mp;
if (mp=(struct namlist *)malloc(sizeof(struct namlist))){
mp->nam=NULL;
mp->next=NULL;
}
return(mp);
}
/*
Free the filename list.
*/
void
freelist(lp)
struct namlist *lp;
{
struct namlist *p;
if (!lp) return;
lp=lp->next; /* don't free 1st item */
while (lp){
p=lp->next;
free(lp->nam);
free(lp);
lp=p;
}
}
/*
Print out the filename list.
*/
void
prlist(fp, lp)
FILE *fp;
struct namlist *lp;
{
if (!lp||!fp) return;
lp=lp->next; /* don't print 1st item */
while (lp){
fprintf(fp, "%s\n", lp->nam);
lp=lp->next;
}
}
/*
An old favorite.
*/
char *
strsave(s)
char *s;
{
register len;
register char *mp;
if (!s) return(NULL);
if (mp=malloc(len=strlen(s)+1))
memcpy(mp, s, len);
return(mp);
}
/*
Report amount of free memory in the system.
Errors not allowed here.
*/
ULONG
amtfree()
{
ULONG c, f;
Forbid();
c=AvailMem(MEMF_CHIP);
f=AvailMem(MEMF_FAST);
Permit();
return(c+f);
}
/*
Print a message corresponding to the error given,
prompting with s, if nonnull.
Return the error given.
*/
prerr(s, err)
char *s;
{
register char *errp;
switch (err){
case E_NOMEM:
errp="Out of memory"; break;
case E_NOEXAM:
errp="Couldn't examine"; break;
case E_NOLOCK:
errp="File not found"; break;
case E_OUTPUT:
errp="Can't open output file"; break;
case E_USAGE:
errp="Usage: qcat [-o outputfile] [-c drivename] or \n\
qcat [-o outputfile] dirname";
break;
case E_LIBRARY:
errp="Couldn't open intuition.library";
break;
default: /* NOTREACHED */
errp="grievous error"; break;
}
if (s) printf("%s: %s\n", s, errp);
else printf("%s\n", errp);
return(err);
}
/*
Set up the AutoRequest stuff, and use the
automatic requestor to tell the user when
to change disks, let them quit, and return
when they do so.
*/
char *rsp_bod0="Insert a disk";
char *rsp_bod1="Next disk";
char *rsp_no="Quit";
char *rsp_yes="Redo";
struct response {
struct IntuiText bod;
struct IntuiText no;
ULONG yflg;
struct Window *w;
} rsp;
/*
Initialize the autorequestor's data and
find a window to put it in. Return nonzero
on failure, zero on success.
*/
getrspinit()
{
rsp.bod.FrontPen=0;
rsp.bod.BackPen=1;
rsp.bod.DrawMode=JAM1;
rsp.bod.LeftEdge=6;
rsp.bod.TopEdge=3;
rsp.bod.ITextFont=NULL;
rsp.bod.IText=rsp_bod0;
rsp.bod.NextText=NULL;
rsp.no=rsp.bod;
rsp.no.IText=rsp_no;
rsp.yflg=DISKINSERTED;
return(!(rsp.w=getCLIwin()));
}
/*
Return a pointer to a window for
the requestor. If there be none,
return NULL.
*/
struct Window *
getCLIwin()
{
register struct Screen *sp;
register struct Window *wp;
return(IntuitionBase->ActiveWindow);
}
/*
Post a requestor asking for a new
disk. The first time called, just
ask for the first disk; after that,
ask for the next. Return the boolean
value of the user's response.
*/
getresponse()
{
register rv=0;
rv=AutoRequest(rsp.w, &rsp.bod, NULL, &rsp.no, rsp.yflg, 0L, 200, 50);
rsp.bod.IText=rsp_bod1;
return(rv);
}
SHAR_EOF
cat << \SHAR_EOF > qcat.doc
11/88
QCAT v0.01 -- List files on disks or in directories
-----------------
Copyright (C) 1988 by Daniel Elbaum
This software is freely redistributable provided that:
the three files which comprise it (qcat, qcat.c, qcat.doc)
remain intact; all copyright notices contained in any of
the aforementioned files remain intact; and no fee beyond
reasonable remuneration for collation and distribution be
charged for use and/or purveyance.
-----------------
Syntax:
qcat [-o filename] [dirname ...]
or
qcat [-o filename] -c drive
Qcat simply produces a listing of the full pathname of all
files in a list of directories or in a series of disks.
With no arguments, a list is produced of the files in the
current directory and all its sub directories.
-o redirects the list to a file of the specified name, wiping
out any file of that name which may already exist.
-c causes a continuous listing of a single drive. A requestor
comes up prompting for a disk to be inserted; the names of the
files on that disk are read, and the requestor comes back asking
for the next disk. When all the disks you want to catalog have
been fed in, click on the 'Quit' gadget, and the complete file
list will be output.
Instead of -c and a drive name, a bunch of directory names can
be given on the command line. A single list will be output of
all the files in all the specified directories and their sub-
directories.
Nota Bene:
The list won't be sorted. There are plenty of utilities out
there which sort files by line, so I didn't want to bloat
this program with the extra functionality. If enough people
want a sorting option, I'll add one.
If the directory trees to be listed are deep (lots of sub-
directories), the be sure to set the stack size to something
like 10000 or so, since the recursive routine that does the
spelunking is pretty stack-hungry.
The purpose of qcat is to list disks or directories, given a
simple command line, without involving the user in an interactive
experience. One good use for it is to make a listing for a set
of disks, then use the list to find out where particular files
are located. Should come in handy for those Fish disks, eh?
The way it works is to keep a linked list of filenames in memory
until all disks or directories have been read, and then to dump
the list. If memory gets low, the list will be dumped several
times during the reading, so even if you have lots of disks to
look at or not much memory or both, qcat should function smoothly.
If you want to send me money for qcat, then by all means
do so--many projects are in progress and I need financing.
$5.00 is recommended. Make checks payable to:
Daniel Elbaum
Amaranth Software
4816 SE Bybee Blvd.
Portland, Ore. 97206
Send comments, suggestions, and flames to:
Daniel Elbaum
Portland bbs: Amigaboard!, NAG, HABIT
UUCP: ...!tektronix!reed!elbaum
ARPA: elbaum@reed.EDU
SHAR_EOF
cat << \SHAR_EOF > qcat.uu
begin 644 qcat
M```#\P`````````&``````````4````"```#8P``"CP```!&````)`````T`F
M``/I`````D[Y```````````#[`````$````"`````@````````/R```#Z@``+
M`V,`(0`!``````````````````````````#_________________________U
M______\`````````````````````````````````````````````````````[
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M````````````````````````#(8```Q\```,=@``#'``````````````````8
M`````````````````````````````````````````````````!Z"````````@
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M````````````````````````````;6%T:&EE965D;W5B8F%S+FQI8G)A<GD`%
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M``````````/L````!0````(```9(```&"```!@P```80```&%`````````/R)
M```#Z0``"CPCSP```#`CP````#@CR````#PL>0````0CS@````23R4ZN_MHH,
M0$JL`*QG``$(80`",I'(("P`K.6((#`($.6(2.<`,$7Y````P$?Y````0"!`W
M<``0&$(P"``FR"`Y````."!Y````/$/P"``,(0`@4LC_^D(I``$2&&=<#`$`G
M(&?V#`$`"6?P)LH,`0`B9Q04P1(89T(,`0`@9P04P6#R0AI@U!(89S`,`0`BK
M9_(,`0`J9B`2&`P!`$YG!@P!`&YF!'(*8`X,`0!%9P8,`0!E9@)R&Q3!8,Q"`
M$D*3(#P````\D(M&@.2(3-\,`$AY````0"\`3KD```!,(\`````8(\`````D(
M3KD```!<(\`````<(\`````@(\`````H(\`````L3KD``"&`<``N>0```#!.\
M=6$``2QA``$6(\`````T+P!"IR1`("H`)&<0+'D````(($`B*```3J[_@D'Y!
M```*]`P0``!G4"(()#P```/M+'D````(3J[_X@R``````&=$(\`````8(\``J
M```<(\`````@(\`````D(\`````H(\`````L*4``G"E``*#EB"!`*6@`"`"D8
M3KD``"&`<`!@!"`O``1*N0```#1G$B(Y````&&L*+'D````(3J[_W"YY````2
M,"\`+'D````$(#D````(9P8B0$ZN_F(@.0````QG!B)`3J[^8B`Y````$&<&Z
M(D!.KOYB2KD````T9PY.KO]\(GD````T3J[^AB`?3G5(YP$&+CP``X`'+'@``
M!$ZN_Y1,WV"`<&1@`/]Z0>P`7$ZN_H!![`!<3J[^C$YU0_H`$G``3J[]V"/`3
M````"&?`3G5D;W,N;&EB<F%R>0!.<4Y6^[A(YQ\\)BX`#$7Y```*P$?Y```A$
M_DGY```!Q$OY```$_'H`?`!8@R!#(%`0$`P``"UF``#*($-2D"!0$!!(@$C`;
M3KD``"><```"Y@```&\```,0````8P````````-N6(,@0R`09@``&$AX__Q"Q
MITZ24$](>``*3I-83V````@@0RP06(-@``!R6(,@0R`09@``&$AX__Q"ITZ2<
M4$](>``*3I-83V````@@0RH06(-(>``!2'D```UP3KD```!X4$\CP````<`@R
M.0```<!F```42'C_^D*G3I)03TAX``I.DUA/8```%$AX__Q"ITZ24$](>``*(
M3I-83V``_RQ*AF<``#!(>0``#6XO!DZY```.!%!/*(`@%&8``!1(>/_[+P9.V
MDE!/2'@`"DZ36$]@```20?D```L((`@&@````"`H@$J%9P``5$ZY```+G$ZYW
M```,(DJ`9P``/GX!2H=G```V2'D```'(+P5.N0``!L103R\%3I583R@`9P``%
M"B\$+P5.DE!/3KD```PB2H!F```$?@!@QF```'H@0R`09@``/$AN^[A.N0``\
M!T183TAN^[A(>0```<A.N0``)(A03TAN^[A.E5A/*`!G```,+P1(;ONX3I)01
M3V```#@@0R`09P``,$AY```!R"!#+Q!.N0``!L103R!#+Q!.E5A/*`!G```,T
M+P0@0R\03I)03UB#8,I(>0``!@`O%$ZY```)Z%!/2'D```8`3KD```FB6$\@Z
M%$'Y```+""((!H$````@L(%G```,+Q1.N0``#8183R`Y```!P&<``!`O.0``1
M`<!.N0```&183T*G3I-83TS?//A.7DYU3E;_]$CG'B`J+@`(1?D```"D>`!V&
M`'P`2H5F```,</U,WP1X3EY.=4AX__XO!4ZY````B%!/*`!F```&</]@X$AXB
M``%(>`$$3KD````@4$\F`&8```PO!$Z26$]P_F#`+P,O!$ZY````N%!/2H!F?
M```:+P1.DEA/2'@!!"\#3KD````X4$]P_6"6($,@*``$;```%DAY```&`"\%X
M3KD```C@4$]@``!0+P,O!$ZY````U%!/2H!G```^(`-0@"\`2'D```'(3KD`_
M``8,4$](>0```<A.N0``!/Q83RP`9P``!F```!)(>0```<A.N0``!FA83V"RL
M+P1.DEA/2'@!!"\#3KD````X4$\@!F``_Q).5O_\2.<<`"8N``@H+@`,*@,@;
M0Q`09P``!E*#8/2VA6<``!I3@R!#$!`,```Z9P``"E*#($,0O``O4H,@1!`01
M9P``#B!$4H0B0U*#$I!@["!#0A!,WP`X3EY.=4Y6__Q(YQ@`*"X`"&8```I,>
MWP`83EY.=28$($,0$&<```92@V#T($,0$`P``"]G```8($,0$`P``#IG```,B
MMH1O```&4X-@WB!#$!`,```Z9@``!%*#($-"$&"T3E;_^$CG'@`F+@`(*BX`P
M#'@`2H-G```(2H5F```,<`!,WP!X3EY.=2!#+P@O`TZY```DG%A/4X`@7]'`@
M$!`,```Z9@``"'P!8```!'P`2'C__B\#3KD```"(4$\H`&8```9P`&"Z+P4O/
M!$ZY```'A%!/+P1.N0```*183R`%8*!.5O_\2.<8`"8N``AF```,<`!,WP`8&
M3EY.=2\#0J=.N0```/!83R@`+P1.N0``!X103R\$3KD```#P6$\@`V#23E;[Y
M5$CG'``F+@`,*"X`"&<```A*@V8```QP`$S?`#A.7DYU0B[_C"\#+P1.N0``T
M"%A03R\$3KD```$$6$\H`&<``$A(;O^,+P1.N0``"%A03TJ`9P``+B\#2&[_\
MC$AY```-:$AN^U1.N0``'/;>_``02&[[5"\#3KD``"2(4$]@```&8```!&"JG
M$"[_C&<``!X@0R\(2&[_C$ZY```DG%A/(%_1P!"\`#I@```B($,O""\#3KD`"
M`"2<6$\J`"!?T<40O``Z($/1Q4(H``$@`V``_TI.5O_\2.<<`"@N``PJ+@`((
M=@!*A6<```A*A&8```QP`$S?`#A.7DYU2'@``4AX`01.N0```"!03R8`9@``.
M!G``8-XO`R\%3KD```"X4$]*@&8``!1(>`$$+P-.N0```#A03W``8+H@`U"`.
M+P`O!$ZY```DB%!/2'@!!"\#3KD````X4$\@!&"83E8``$CG&``F+@`,*"X`&
M"&<```A*@V8```QP_TS?`!A.7DYU3KD```J$#(```/H`;```'"\#+SD```'$9
M3KD```GH4$\O`TZY```)HEA/($,@*``$9P``"B!#)B@`!&#N3KD```EX($,A1
M0``$("@`!&8```9PG&"D+P1.N0``"CA83R!#(&@`!""`(!!F```&<)M@B'``]
M8(1.5O_\+P-(>``(3KD```_\6$\F`&<```P@0T*0($-"J``$(`,F'TY>3G5.Z
M5O_\2.<8`"8N``AF```*3-\`&$Y>3G4@0R8H``1*@V<``"(@0R@H``0@0R\0Z
M3KD``">P6$\O`TZY```GL%A/)@1@VF#*3E8``$CG&``F+@`,*"X`"$J#9P``G
M"$J$9@``"DS?`!A.7DYU($,F*``$2H-G```@($,O$$AY```-9"\$3KD``!T<(
MWOP`#"!#)B@`!&#<8,Q.5O_X2.<<`"@N``AF```,<`!,WP`X3EY.=2\$3KD`U
M`"2<6$]2@"H`+P5.N0``#_Q83R8`9P``$B\%+P0O`TZY```H=-[\``P@`V#&:
M3E;_^$CG&`!.N0````!(>``"3KD```!06$\H`$AX``1.N0```%!83R8`3KD``
M```0(`30@TS?`!A.7DYU3E;__$CG'``H+@`(*BX`#"`%#(#____Z;0``@%R`6
M#(`````%;@``=.6`0?D```KV(G`(`$[1```+3@``"S8```M"```+'@``"Q(`X
M``LJ`````$'Y```-5B8(8```1D'Y```-1"8(8```.D'Y```--"8(8```+D'YJ
M```-'"8(8```(D'Y```,T"8(8```%D'Y```,L"8(8```"D'Y```,H"8(2H1GJ
M```:+P,O!$AY```,F$ZY```=9-[\``Q@```2+P-(>0``#)1.N0``'6103R`%C
M3-\`.$Y>3G5.<4Y6```O"D7Y```&&$(2%7P``0`!0BH``C5\``8`!#5\``,`.
M!D*J``@E>0``!@@`#$*J`!!(4D/J`!0@7W`%(MA1R/_\)7D```80`"`E?````
M@```*$ZY```,$"5``"P@*@`L9@``"'`!8```!$*`)%].7DYU3E;_^"!Y```!^
MP"`H`#1.7DYU3E;__$CG$"!%^0``!AAV`$AX`#)(>`#(0J<O*@`H(`H&@```/
M`!0O`$*G+PHO*@`L3KD`````WOP`("8`)7D```8,``P@`TS?!`A.7DYU4F5DQ
M;P``475I=```3F5X="!D:7-K`$EN<V5R="!A(&1I<VL`)7,*`"5S.B`E<PH`S
M9W)I979O=7,@97)R;W(``$-O=6QD;B=T(&]P96X@:6YT=6ET:6]N+FQI8G)A+
M<GD`57-A9V4Z('%C870@6RUO(&]U='!U=&9I;&5=(%LM8R!D<FEV96YA;65=+
M(&]R(`IQ8V%T(%LM;R!O=71P=71F:6QE72!D:7)N86UE`$-A;B=T(&]P96X@8
M;W5T<'5T(&9I;&4``$9I;&4@;F]T(&9O=6YD``!#;W5L9&XG="!E>&%M:6YEE
M``!/=70@;V8@;65M;W)Y`"5S"@`E<R\E<P!W`&EN='5I=&EO;BYL:6)R87)YD
M`$YQ3E8``"\#)BX`"&<``'(,@P``"PAG```J0?D```L((`@&@````""V@&<`U
M`!9!^0``"P@@"`:`````0+:`9@``""8?3EY.=2\#3KD``"5(6$\@0R\03KD`?
M```<6$\@0R\H``P@0R\H`!I.N0```#A03TAX`"`O`TZY```E+%!/8,!.5O_LS
M2.<?,"1N``PF;@`(+#P```$`>``,A@````%L```$?`%V`'H`#(4````4;```:
M,D'Y```+""`((@7K@="!($`@*``:9@``%D'Y```+""`((@7K@="!)@!@```&N
M4H5@QDJ#9P`!`A`2#```<F8``!HN/````^T0*@`!#```*V8```@N/````^T0X
M$@P``'=F```Z+CP```/N$"H``0P``"MF```H2'@#[2\+3KD`````4$\H`&<`O
M`!1(>``!0J<O!$ZY````;-[\``Q*A&8``!`O!R\+3KD`````4$\H`$J$9P``!
M;"!#((0@0R%&``P@0T)H`!X@0T*H``@@0T*H``1"IR\&3KD````@4$\@0R%`"
M`!H@*``:9P``)$*G0J<O!$ZY````;-[\``P@0R%``!0B0R-H`!0`$&```!`OP
M!$ZY````'%A/8```!F```!I(>``@+P-.N0``)2Q03W``3-\,^$Y>3G4@`V#T\
M3E;_\$CG'@!X_W8`#(,````4;```)"`N`!!!^0``"P@B""0#ZX+2@K"!9@``4
M""@#8```!E*#8-0,A/____]G``!(+RX`#"\N``A.N0``#@103RP`+P9.N0``+
M(W!83RH`2'@`@"\%+P1.N0``)+#>_``,0?D```L((`@B!.N!T(%,WP!X3EY.!
M=7``8/1.5O_\2.<8($7Y```-B"@N``A"IR`$!H`````0+P!.N0```"!03R8`N
M(!)G```((%(A0P`$($,@DB!#(4H`!"`$!H`````0($,A0``()(,@`P:`````X
M#$S?!!A.7DYU3E;_^$CG&``O+@`,+RX`"$ZY```E]"`?6$\H`"\$3KD``")XT
M6$\F`"\$+P-.N0``)2Q03R`#3-\`&$Y>3G5.5O_T2.<>`"@N``@O+@`,3KD`P
M`")X6$\F`&<``#0@!`2`````$"P`($8@*``(!(`````0*@`O!2\#+P1.N0``Z
M)&C>_``,+P1.N0``(]183R`#3-\`>$Y>3G5.<4Y6__1(YQ\`)BX`""HN``Q!D
M^0``"DP@"`:`````?R@`($1"$`R#@````&8``%@@!4ZY```GG```$4H````(Y
M```16@````H``!%D````$````````!%N0?D``!YV(`A,WP#X3EY.=4'Y```>9
M:B`(8.Y!^0``'F`@"&#D0?D``!Y8(`A@VDJ#;```"'`!8```!$*`+@!G```(+
M(`-$@"8`+P4O`TZY```G!B`?6$\L`"\%+P-.N0``)F8@'UA/)@`@>0``!DC1V
MQE.$(D02D$J#;LY*AV<```I3A"!$$+P`+2`$8`#_?$Y6_\A(YQ\`*BX`$`R%5
M````(&\```1Z!D'Y```>4$/N``@@*0``(BD`!$ZY```A+DJ`;```"'`!8```Q
M!$*`+@!G```@0>X`""`H```B*``$3KD``"$>0>X`""%````A00`$0>X`""\H:
M``0O*```3KD``!ZH4$]![O_8(4```"%!``1![O_80^X`""`I```B*0`$3KD`R
M`"$&0>[_X"%````A00`$0?D```I,)@A\`+R%;```CD'Y```>2$/N_^`@*0``J
M(BD`!$ZY```@OD'N_^`A0```(4$`!$'N_^`O*``$+R@``$ZY```>J%!/+P$@%
M`"(?3KD``"%F*``&```P($-2@Q"`(`1.N0``(59![O_@+P$O`"`H```B*``$:
M+5__R"U?_\Q![O_(3KD``"$&0>[_X"%````A00`$4H9@`/]P($-2@T(0<#]!$
M^0``"DPB""0%1(+2@M"!)@!(>0``"DPO`TZY```DB%!/4X,@0Q"\`"Y!^0``[
M'D!#[O_8("D``"(I``1.N0``(-8O`2\`3KD``!ZH4$]![O_0(4```"%!``1!,
M^0``'CA#[O_0("D``"(I``1.N0``(+Y![O_8+P$O`"`H```B*``$+5__R"U?F
M_\Q![O_(3KD``"$&+P$@`"(?3KD``"%F*``&```P4X,@0Q"`0>[_T$/N_]@C>
M:``````C:``$``1!^0``'C!#[O_8("D``"(I``1.N0``(2Y*@&X`_TY*AV<`V
M``I3@R!#$+P`+2`#3-\`^$Y>3G5.5O_(2.<?("XN`!`,AP```"!O```$?@9!A
M^0``'BA#[@`(("D``"(I``1.N0``(2Y*@&P```AP`6````1"@"1`(`IG```@0
M0>X`""`H```B*``$3KD``"$>0>X`""%````A00`$>`!!^0``'B!#[@`(("D`#
M`"(I``1.N0``(2Y*@&<``(Y!^0``'AA#[@`(("D``"(I``1.N0``(2Y*@&T`R
M`"I!^0``'A!#[@`(("D``"(I``1.N0``(-9![@`((4```"%!``12A&"Z0?D`(
M`!X(0^X`""`I```B*0`$3KD``"$N2H!L```J0?D``!X`0^X`""`I```B*0`$6
M3KD``""^0>X`""%````A00`$4X1@ND'N``@O*``$+R@``$ZY```>J%!/0>[_7
MV"%````A00`$0>[_V$/N``@@*0``(BD`!$ZY```A!D'N_^`A0```(4$`!$'YS
M```*3"8(>@"ZAVP``(Y!^0``'?A#[O_@("D``"(I``1.N0``(+Y![O_@(4``$
M`"%!``1![O_@+R@`!"\H``!.N0``'JA03R\!(``B'TZY```A9BP`!@``,"!#V
M4H,0@"`&3KD``"%60>[_X"\!+P`@*```(B@`!"U?_\@M7__,0>[_R$ZY```A4
M!D'N_^`A0```(4$`!%*%8`#_<"!#4H,0O`!%2H1M```.($-2@Q"\`"M@```0R
M($-2@Q"\`"T@!$2`*`!Z`DJ%;0``,DAX``HO!$ZY```G!B`?6$\L``8``#`@$
M0]'%$(!(>``*+P1.N0``)F8H'UA/4X5@RB!#0B@``W`Y0?D```I,(@@D!T2"-
MTH+0@28`2'D```I,+P-.N0``)(A03U.#($,0O``N0?D``!WP0^[_V"`I```B3
M*0`$3KD``"#6+P$O`$ZY```>J%!/0>[_T"%````A00`$0?D``!WH0^[_T"`I"
M```B*0`$3KD``""^0>[_V"\!+P`@*```(B@`!"U?_\@M7__,0>[_R$ZY```AW
M!B\!(``B'TZY```A9BP`!@``,%.#($,0@$'N_]!#[O_8(V@`````(V@`!``$T
M0?D``!W@0^[_V"`I```B*0`$3KD``"$N2H!N`/].(`IG```*4X,@0Q"\`"T@?
M`TS?!/A.7DYU3E;_]$CG&``H+@`00?D``!W80^X`""`I```B*0`$3KD``"$NS
M2H!L```80>X`""`H```B*``$3KD``"$>8```#D'N``@@*```(B@`!$'N__0A?
M0```(4$`!$'Y```=T$/N__0@*0``(BD`!$ZY```A+DJ`;@``($'Y```=R$/N'
M__0@*0``(BD`!$ZY```A+DJ`;```(B\$0>X`""\H``0O*```3KD``!06WOP`@
M#$S?`!A.7DYU+P1![@`(+R@`!"\H``!.N0``$=C>_``,)@`O`TAY```*3$ZYF
M```DB%!/2H1O```L0?D```I,)@@@0Q`09P``!E*#8/13@R!#$!`,```P9@``&
M"B!#4X-"$&#L0?D```I,(`A@E$Y6__A(YQP`*BX`"'@`0?D```I,)@A!^0``#
M"DPF""!%$!!G```0($52A2)#4H,2D%*$8.JXK@`,;```$"`N`!`@0U*#$(!2>
MA&#J($-"$$'Y```*3"`(3-\`.$Y>3G5.5O_X2.<<`"@N``@O!$ZY```DG%A/R
M*@!!^0``"DPF""`%4H6PK@`,;```#B`N`!`@0U*#$(!@Z"\$+P-.N0``)(A0>
M3T'Y```*3"`(3-\`.$Y>3G5.5@``2.<<`"8N``@H+@`,*BX`$$J$;P``&"\%W
M+P0O`TZY```8V-[\``PF`&```!Y*A&P``!@O!2`$1(`O`"\#3KD``!AZWOP`H
M#"8`(`-,WP`X3EY.=4Y6_]9(YQ\\)FX`$$OY```0]"@N``PF+@`(($,0$&<`^
M`TH@0Q`02(!(P$ZY```GG```&<(````E````````'-Y2@S1\```L/```!``@U
M0Q`0#```+68```AP`6````1"@"U`__0@+O_T9P``!%*#($,0$$B`2,`H0"`,I
M#(`````P9P``!CA\`"`@0Q`0#```*F8```Y2@R!$)%!8A&```#H@0Q`0#```<
M,&T``"X@0Q`0#```.6X``"(@"M"`(@#E@="!($,2$$B!2,'0@02`````,"1`V
M4H-@R"`N__1G```((`I$@"1`($,0$`P``"YF``!64H,@0Q`0#```*F8```Y2,
M@R!$+!!8A&```#Q\`"!#$!`,```P;0``+B!#$!`,```Y;@``(B`&T(`B`.6!'
MT($@0Q(02(%(P="!!(`````P+`!2@V#(($,0$$B`2,!.N0``)YP``!L^````,
M)0``&U8```!C```;<@```&0``!N&````90``&ZH```!F```;S@```&<``!ORX
M````;```&_@```!O```<#````',``!PD````=0``'#@```!X```<@@```%@``
M```````<EAU\`"7_UD'N_]9"*``!0>[_UBH(8``!2B!$(!`=0/_60>[_UD(H)
M``%![O_6*@A8A&```2Y(>``*($0O$$Z54$\J`%B$8``!&B\&($0O*``$+R@`=
M`$ZY```4%M[\``PJ`%"$+#P```0`8```]B\&($0O*``$+R@``$ZY```1V-[\L
M``PJ`%"$+#P```0`8```TB\&($0O*``$+R@``$ZY```78M[\``PJ`%"$+#P`_
M``0`8```KE*#8`#^TDAX``@@1"\03I503RH`6(1@``"4($0J$%B$2H5F```*W
M0?D``!W`*@A@``!\2'@`"B!$+Q!.E5!/*@!8A&```&A(>``0($0O$$Z54$\J!
M`"X%($<0$&<``"X@1Q`0#```06T``!X@1Q`0#```6FX``!(@1Q`02(!(P`8`X
M`"`@1Q"`4H=@S%B$8```'DAX`!`@1"\03I503RH`6(1@```*0?D``!VX*@@O+
M!4ZY```DG%A/L(9O```(($71QD(0+PPO"B\%3KD``!DLWOP`#"H`($40$&<`>
M``X@15*%(DM22Q*08.Q@```*($,B2U)+$I!2@V``_+)"$TS?//A.7DYU3E8`E
M`"\#)BX`""\#2&X`$"\N``Q.N0``&8+>_``,(`,F'TY>3G5.5O_\+P-!^0``9
M!DPF""\#2&X`$"\N``Q.N0``&8+>_``,+RX`""\#3KD``"2<6$\O`$AX``$O-
M`TZY```?@-[\`!`F'TY>3G5.5O_\+P-!^0``!DPF""\#2&X`#"\N``A.N0``R
M&8+>_``,0?D```L((`@&@````"`O`"\#3KD``"2<6$\O`$AX``$O`TZY```?S
M@-[\`!`F'TY>3G4M3T]04RT``"AN=6QL*0``.\><H0R20BM$%:\=>+6,0```M
M``````````````````!`)````````$`D````````0"0```````!`)```````0
M`#_P````````0"0```````!`)```````````````````````````````````W
M`````$`D````````0"0```````!`)```````````````````+4]/4%,M```X_
M,#`P,#`P,```+3(Q-#<T.#,V-#@`,C`P,#`P,#`P,#``,#$R,S0U-C<X.4%"N
M0T1%1D=(24I+3$U.3U!14E-455976%E:``!.5O_\0>X`""`H```B*``$3KD`/
M`"%F+4#__"`N__Q.N0``(59.7DYU3E;_^$'N``@O*``$+R@``$ZY```>J%!/5
M0>[_^"%````A00`$0>[_^$/N``@@*0``(BD`!$ZY```A+DJ`;```'D'Y```?G
M=D/N__@@*0``(BD`!$ZY```@[DY>3G5![O_X("@``"(H``1@[F#L3E8``$'YN
M```?;D/N``@@*0``(BD`!$ZY```@[B\!+P!.N0``'JA03TZY```A5DY>3G4_J
MX````````#_P````````3G%.5O_T2.<?("8N`!0N+@`()&X`#'P`+PHO+@`0?
M3KD``"7T(!]83RH`($,@*``,($.0J``$L(5L```2($,@*``,($.0J``$8```O
M!"`%*``O!"!#("@`&B!#T*@`!"\`+P=.N0``)&C>_``,W(2:A-Z$($/9J``4>
M($/9J``$($,@*``(($.PJ``$;```#"!#(D,C:``$``@@0P`H``$`&$J%9P``+
M)B\#3KD``"5(6$\H``R$_____V8```P@!$S?!/A.7DYU8```!F````9@`/]:8
M+P-.N0``)4A83R\*+P9.N0``)F8@'UA/8-).<4CGP,`@.0````QF```^0_D`9
M``K,<``L>0````1.KOW8(\`````,9@``(DCG`08N/``#@`4L>``$3J[_E$S?!
M8(!(>`!D3KD``"'^+$!,WP,#3G5(YS`"3KD``"!L3-@`#$ZN_[),WT`,3G5(=
MYS`"3KD``"!L3-@`#$ZN_ZQ,WT`,3G5(YS`"3KD``"!L3-@`#$ZN_[Y,WT`,1
M3G5(YS`"3KD``"!L3-@`#$ZN_[A,WT`,3G4O#DZY```@;$ZN_\0L7TYU2.<P0
M`DZY```@;$S8``Q.KO_63-]`#$J`9@1P`&`(:P1P`6`"</].=2\.3KD``"!L=
M3J[_W"Q?3G4O#DZY```@;$ZN_^(L7TYU0H%.=4*!3G5.<4Y6```O"D7Y```DJ
ML$*Y```-B$AX`H!(>0``"PA.N0``)2Q03TAX`0`O.0```!A"ITZ2WOP`#$AX]
M`0`O.0```!Q(>``!3I+>_``,2'@!`"\Y````($AX``).DM[\``PO+@`,+RX`C
M"$ZY```"A%!/0J=.N0``(?Y83R1?3EY.=4Y6__Q(YQ`P1?D```V(1_D``"-P0
M2'D```L(3I-83T'Y```+""`(!H`````@+P!.DUA/0?D```L((`@&@````$`O8
M`$Z36$\@$F<``!H@4B80(%(O*``(+Q).N0```#A03R2#8.(O+@`(3KD```'$M
M6$],WPP(3EY.=4YQ3E;__$CG&"!%^0``#8@H+@`(0J<@!`:`````$"\`3KD`D
M```@4$\F`"`29P``""!2(4,`!"!#()(@0R%*``0@!`:`````$"!#(4``""2#T
M(`,&@`````Q,WP083EY.=4Y6__A(YQ@`+RX`#"\N``A.N0``)?0@'UA/*``OX
M!$ZY```B>%A/)@`O!"\#3KD``"4L4$\@`TS?`!A.7DYU3E;_]$CG'@`H+@`(E
M+RX`#$ZY```B>%A/)@!G```T(`0$@````!`L`"!&("@`"`2`````$"H`+P4OM
M`R\$3KD``"1HWOP`#"\$3KD``"/46$\@`TS?`'A.7DYU3G%.5O_\2.<8`"8NU
M``@O`TZY```E2%A/0J<@0R`H`!0@0Y"H`!`O`"!#*!`O!$ZY````;-[\``P@>
M0R\H``P@0R\H`!I.N0```#A03TAX`"`O`TZY```E+%!/(`1,WP`83EY.=4YQV
M3E;__$CG&``H+@`(9P``2G#T0?D```KD(@@$@0``"N0D!)2!(@+0@28`($,B[
M0R)I``0BD"!#(!!G```.($,B0R)1(V@`!``$($,O*``(+P-.N0```#A03TS?7
M`!A.7DYU3E;__$CG$"!%^0``#8@@$F<``!H@4B80(%(O*``(+Q).N0```#A04
M3R2#8.),WP0(3EY.=4Y6```O+@`0+RX`""\N``Q.N0``*'3>_``,3EY.=4YQT
M(&\`!")O``@0V6;\("\`!$YU3G$@;P`$2AAF_)'O``13B"`(3G5.<4Y6__Q(3
MYQ@`*"X`$&8```1X`4'Y```+""`((BX`".N!T($F`&<``%)"IR!#(40`#"\H%
M``Q.N0```"!03R!#(4``&B`H`!IG```P0J="IR!#(*X`#"\03KD```!LWOP`$
M#"!#(4``%")#(V@`%``0(`-,WP`83EY.=7``8/1.5@``+RX`#$*G+RX`"$ZYS
M```H1-[\``Q.7DYU3E;_]$CG'B`F+@`(-'P`$'P`($,0*``82(!(P`*`````B
M`6<``'(@0R`H`!0@0Y"H``0J`"`R.`"PA6<``!I"IR`%D+(X`"\`($,O$$ZY"
M````;-[\``P@0R\H``0@0R\H`!H@0R\03KD````PWOP`#"@`($.XJ``$9P``Y
M#'S_2H1L```$>``@!="$)8`X`"!#`BC__@`8($-"J``(($-"J``$(`9,WP1XH
M3EY.=4Y6``!(Y_@`2FX`"&8``!Y*;@`,9@``%C`N``K`[@`.+4``"$S?`!].O
M7DYU>`$D+@`(;```!D2"1(0F+@`,;```!D2#1(1"@#`"P,,R`DA"Q,-(0\+#A
MTH)(04)!T(%*A&P```1$@"U```A,WP`?3EY.=4Y6```O`$IN``QF'"`N``AK[
M%H#N``YI$`*```#__RU```@@'TY>3G5(YWP`>@$@+@`(;`1$@$2%)@`B+@`,I
M;`1$@42%*`$,@0`!``!L%$)`2$"`P30`,`.`P4A`,`)(0&`JXHCBB0R!``$`7
M`&ST@,$"@```__\D`"\`+P1A`/\0(!]83[:`;`)3@B`"2H5L`D2`+4``"$S?Y
M`#X@'TY>3G5.5@``2.?X`$IN``QF'"`N``AK%H#N``YI$$)`2$`M0``(3-\`S
M'TY>3G5X`2`N``AL!$2`1(0D`"(N``QL`D2!#($``0``;!!"0$A`@,$P`H#!4
M0D!(0&`L)@'BB.*)#($``0``;/2`P0*```#__R\`+P-A`/YZ(!]83[2`9`*0+
M@Y""1(!*A&P"1(`M0``(3-\`'TY>3G4@7R)8(@EG!K"89O9.T2!03M!.<4Y6,
M__Q(YQ@`*"X`"&<``$IP]$'Y```*^"((!($```KX)`24@2("T($F`"!#(D,BD
M:0`$(I`@0R`09P``#B!#(D,B42-H``0`!"!#+R@`""\#3KD````X4$],WP`8*
M3EY.=4Y6__Q(YQ`@1?D```V((!)G```:(%(F$"!2+R@`""\23KD````X4$\DO
M@V#B3-\$"$Y>3G5.5O_T2.<>`"HN``@L!2@N``PF+@`02H-O```,($92AA"$`
M4X-@\"`%3-\`>$Y>3G5.5O_T2.<?`"PN`!`N+@`(2H9N```,(`=,WP#X3EY.>
M=2HN``PH![J$;@``."`&4X`B!=*`(`&PA&T``"@@!E.`VH`@!E.`V(`F!DJ#E
M;P``$"!%4X4B1%.$$I!3@V#L8```&"8&2H-O```0($52A2)$4H02D%.#8.P@)
M!V"<```#[````&L````!```H&@``)\0``"?,```DQ```)#X``"/H```C\```F
M(H(``"'0```AO```(:H``"&8```B%```(AX``"(R```AC@``(@@``"!R```@+
MC@``('P``!V(```1!@``$;0``!)^```3(@``$S0``!5J```6;@``%H```!@T<
M```82```&'(``!B*```8D@``&,H``!CR```9'@``'20``!UL```0!@``#C@`_
M``Y0```/C```#^0```V4```-G@``#;(```ND```+Q@``"^(```P6```,+```^
M#&````.Z```$N@```IX```-*```#4````^H```0Z```$;```!)H```2J```$2
MV```!.(```62```%O@``!<P```7D```)&````6`````"````"`````X````:&
M````1@```$P```!>````9````-X```#N````_````0(```$.```!%````1H`>
M``$@```!+@```3X```%0```!=````88```&,```!D@```9@```&>```!I```9
M`<H```'2```!V@```>0```'R```"`````@X```(<```"*````FX```#H````#
M`@``)3P``"1Z```CP@``(X```"->```C4@``(P0``"+H```B]@``(R8``")H;
M```B#@``(>@``"&>```AB```(?(``""R```@Q```(-P``"#T```A#```(2(`J
M`"$T```A6@``(6H``"!@```@*```(%0``!_B```?G@``'R0``!]4```?!@``P
M'L@``!]F```>N@``'N(``!\2```?0@``'UX``!U6```=J@``&.@``!RB```=G
M1@``'9H``!->```4S```%JH``!,\```6B```&#H``!D6```2X```%<P``!+,M
M```3O```%;@``!<(```2H```$XX``!42```5C```%MH``!)L```3`@``$[``<
M`!58```5[@``%OP``!)(```2O@``$V@``!4T```5J@``%K0``!(J```4:@``S
M%YH``!($```3]```%$(``!20```4K@``%/0``!=````7@@``%\X``!?L```1[
MJ```%E@``!&8```6/```$28``!FN```:T@``$2H``!$R```1.@``$48``!%,X
M```17```$68``!%P```1\@``$HX``!-,```3?```$^(``!0P```4?@``%)P`Q
M`!2Z```4X@``%0```!5Z```6F```%L@``!<N```7<```%[P``!?:```8!@``B
M&"8``!E.```9;@``&9```!FR```9O@``&M8``!K>```:Y@``&NX``!KV```:1
M_@``&P8``!L.```;%@``&QX``!LF```;+@``&SH``!N4```;N```&]P``!P:`
M```<F```'+P``!T,```=-@``'7X``!#B```0U@``$(@``!!Z```0J@``$&P`3
M``_:```/R```#UP```^\```-_```#<X```OR```+=```"XH```IX```*)@``=
M"=(```G<```)A```"F0```?N```&]```""````@Z```*5@``!-````1````'3
M_@``",@```.4```"R@```I@```*2```"I````LX```+6```"X@```SP```.,?
M```#T````]8```/R```$#@``!"X```1V```$H@``!+````6:```%Q```!=(`X
M``7J```',```!W````>R```'T```!^0```D&```)'@``"2@```E"```)7```O
M"AX```KL```*]@``"OH```K^```+`@``"P8```L*```+%```"R````LL```+I
M.```"T0```M0```+7```"VX```N$```!)@```;P````6`````P``);```"66>
M```E"```(YX```]&```.R```#R@```ZR```.W```#=H```>\```'9```!WH`0
M``6J```%8@``"*````4L```'&@``!0H```<Z```!"````/8````7````!```Z
M*`(``"@R```DY@``)"8``"16```CM```(I@``")8```0'```#PP```WN```*I
ML```"I@```JF```*C@``!7P```8````(M```"-8```5&```(B@``!.@```-")
M`````0````4```Q4`````````_(```/I````1DCG(`),[P`&``PL>0````A.F
MKO_B3-]`!$YU```O#B(O``@L>0````A.KO_<+%].=4CG,`),[P`.`!`L>0``(
M``A.KO_03-]`#$YU```O#BQY````"$ZN_\HL7TYU+PXL>0````A.KO_$+%].,
M=4CG,`),[P`.`!`L>0````A.KO^^3-]`#$YU``!(YR`"3.\`!@`,+'D````(:
M3J[_K$S?0`1.=0``+PXB+P`(+'D````(3J[_IBQ?3G5(YR`"3.\`!@`,+'D`.
M```(3J[_FDS?0`1.=0``2.<@`DSO``8`#"QY````"$ZN_Y1,WT`$3G4``"\.8
M(B\`""QY````"$ZN_X(L7TYU+PXB+P`(+'D````(3J[_+BQ?3G4```/L````Z
M#`````$```$,````^````.````#$````K````)0```!X````8````%`````\:
M````)`````P````````#\`````-?4&%R96YT1&ER`"4```$$`````U]#=7)RV
M96YT1&ER`````/`````"7T5X3F5X=`````#4`````E]%>&%M:6YE````N```'
M``)?56Y,;V-K`````*0````"7TQO8VL`)>D```"(`````E]3965K`"7I````(
M;`````)?3W5T<'5T`````%P````"7TEN<'5T`"4```!,`````E]7<FET90`EM
M````,`````)?0VQO<V4`)0```!P````"7T]P96X`)>D``````````````_(`^
M``/I````)"\.+'D````$3J[_?"Q?3G4O#BQY````!$ZN_W8L7TYU+PXL>0``"
M``1,[P`#``A.KO\Z+%].=0``+PXL>0````0B;P`(("\`#$ZN_RXL7TYU+PXL'
M>0````0B+P`(3J[_*"Q?3G4O#BQY````!")O``A.KOYB+%].=2\.+'D````$6
M(F\`""`O``Q.KOW8+%].=0```^P````'`````0```'P```!H````5````#P`^
M```D````%`````0````````#\`````-?3W!E;DQI8G)A<GD```!X````!%]#6
M;&]S94QI8G)A<GD`)>D```!D`````U]!=F%I;$UE;0`EZ0```%`````"7T9R?
M965-96T````X`````U]!;&QO8TUE;0`EZ0```"`````"7U!E<FUI=``````0=
M`````E]&;W)B:60```````````````/R```#Z0````U(YS`R+'D```'`(&\`K
M&")O`!PD;P`@)F\`)"`O`"@B+P`L)"\`,"8O`#1.KOZD3-],#$YU```#[```$
M``$````!````!@````````/P`````U]!=71O4F5Q=65S=``````````````#B
!\@$`S
``
end
size 16696
SHAR_EOF
# End of shell archive
exit 0
--
Bob Page, U of Lowell CS Dept. page@swan.ulowell.edu ulowell!page
Have five nice days.